﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using PEMS.Common;

namespace PEMS.Server
{
    [Serializable]
    public class Felev
    {
        public string id { get; set; }
        public string megnevezes { get; set; }
        public DateTime kezdoDatum { get; set; }        
        public DateTime vegDatum { get; set; }
        public bool aktualis { get; set; }

        /// <summary>
        ///  a félévhez gyártott kurzusok listája
        /// </summary>
        public SerializableDictionary<string, Kurzus> kurzusList { get; set; }

        
        /// <summary>
        /// ebben tároljuk a jelentkezett hallgatokat
        /// </summary>
        public SerializableDictionary<string, FelevJelentkezes> jelentkezettList { get; set; }

        /// <summary>
        /// konstruktor
        /// </summary>
        public Felev()
        {
            kurzusList = new SerializableDictionary<string, Kurzus>();
            jelentkezettList = new SerializableDictionary<string, FelevJelentkezes>();
        }

        /// <summary>
        /// konstruktor
        /// </summary>
        public Felev(string id, string megnevezes, DateTime kezdoDatum, DateTime vegDatum)
        {
            kurzusList = new SerializableDictionary<string, Kurzus>();
            jelentkezettList = new SerializableDictionary<string, FelevJelentkezes>();

            this.id = id;
            this.megnevezes = megnevezes;
            this.kezdoDatum = kezdoDatum;
            this.vegDatum = vegDatum;
            aktualis = true;
        }

        public bool FelevJelentkezes(Hallgato hallgato){
            try
            {
                // beiratkozás egy félévre
                FelevJelentkezes felevJelentkezes = new FelevJelentkezes(hallgato);

                //a jelentkezés hozzáadása a félévhez
                jelentkezettList.Add(felevJelentkezes.hallgato.userName, felevJelentkezes);
            }
            catch
            {
                return false;
            }
            return true;
        }

        public Kurzus getKurzus(string id)
        {
            try
            {
                if (kurzusList.ContainsKey(id))
                {
                    return kurzusList[id];
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("\nException in getKurzus(): " + e.Message + "\n");
                return null;
            }
            return null;
/*            Kurzus k = new Kurzus();
            k = null;
            try
            {                
                foreach (KeyValuePair<string, Kurzus> kurzus in kurzusList)
                {
                    if (kurzus.Value.id == id)
                    {
                        k = kurzus.Value;
                    }
                }
            }
            catch (Exception e)
            {
                return null;
            }
            return k;*/
        }

        public SerializableDictionary<string, Kurzus> getKurzusLista()
        {
            return kurzusList;
        }

        public bool kurzusMeghirdetese(string id, string megnevezes, Oktato oktato, Targy targy)
        {
            try
            {
                //egy kurzus létrehozása
                Kurzus kurzus = new Kurzus(id, megnevezes, oktato, targy);

                //a kurzust felfűzzük a félév tárolójába
                kurzusList.Add(kurzus.id, kurzus);
            }
            catch
            {
                return false;
            }
            return true;
        }

        public FelevJelentkezes getFelevJelentkezes(string hallgatoID)
        {
            try
            {
                if (jelentkezettList.ContainsKey(hallgatoID))
                {
                    return jelentkezettList[hallgatoID];
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("\nException in getFelevJelentkezes(): " + e.Message + "\n");
                return null;
            }
            return null;
/*            FelevJelentkezes fj = new FelevJelentkezes();
            fj = null;
            try
            {
                foreach (KeyValuePair<string, FelevJelentkezes> felevJelentkezes in jelentkezettList)
                {
                    if (felevJelentkezes.Value.hallgato.userName == hallgatoID)
                    {
                        fj = felevJelentkezes.Value;
                    }
                }
            }
            catch
            {
                return null;
            }
            return fj;*/
        }

        public bool beiratkozottFelevre(string hallgatoID)
        {
            if (jelentkezettList.ContainsKey(hallgatoID))
            {
                return true;
            }
            return false;
        }

    }
}
